package com.example.aviatorCount.service;

import com.example.aviatorCount.model.FormulaResult;
import com.googlecode.aviator.AviatorEvaluator;
import com.googlecode.aviator.Expression;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 简化的动态公式计算器
 * 基于Aviator表达式引擎，只提供核心计算功能
 */
@Slf4j
@Service
public class DynamicFormulaCalculator {

    /**
     * 表达式缓存
     */
    private final Map<String, Expression> expressionCache = new ConcurrentHashMap<>();

    public DynamicFormulaCalculator() {
        log.info("动态公式计算器初始化完成");
    }

    /**
     * 直接计算表达式 - 简化版本
     */
    public FormulaResult calculateExpression(String expression, Map<String, Object> inputValues) {
        try {
            // 直接执行表达式
            Object result = executeExpression(expression, inputValues);

            // 包装结果
            Map<String, Object> outputs = new HashMap<>();
            outputs.put("result", result);

            return FormulaResult.success(outputs);

        } catch (Exception e) {
            log.error("表达式计算出错: " + expression, e);
            return FormulaResult.error("计算出错: " + e.getMessage());
        }
    }


    /**
     * 执行表达式
     */
    private Object executeExpression(String expression, Map<String, Object> context) {
        Expression compiledExpr = expressionCache.computeIfAbsent(expression, AviatorEvaluator::compile);
        return compiledExpr.execute(context);
    }


    /**
     * 清除缓存
     */
    public void clearCache() {
        expressionCache.clear();
        log.info("已清除表达式缓存");
    }
}
